﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;

namespace PSE.Updater.Common.Configurations.Client
{
    public class UpdateServersConfigurationElementCollection : ConfigurationElementCollection
    {
        /// <summary>
        /// Cria um Novo elemento de Configuração
        /// </summary>
        /// <returns>Novo elemento de Configuração</returns>
        protected override ConfigurationElement CreateNewElement()
        {
            return new UpdateServersConfigurationElement();
        }

        /// <summary>
        /// Obtem o index de um elemento
        /// </summary>
        /// <param name="element">Elemento</param>
        /// <returns>index de um elemento</returns>
        protected override object GetElementKey(ConfigurationElement element)
        {
            return ((UpdateServersConfigurationElement)element).Url;
        }

        /// <summary>
        /// Obtém o nome de um elemento
        /// </summary>
        protected override string ElementName
        {
            get { return "server"; }
        }

        /// <summary>
        /// Obtém o tipo da Coleção
        /// </summary>
        public override ConfigurationElementCollectionType CollectionType
        {
            get { return ConfigurationElementCollectionType.BasicMap; }
        }

        /// <summary>
        /// Obtém uma configuração pelo índice
        /// </summary>
        /// <param name="index">índice da configuração</param>
        /// <returns>uma configuração pelo índice</returns>
        public UpdateServersConfigurationElement this[int index]
        {
            get { return this.BaseGet(index) as UpdateServersConfigurationElement; }
            set
            {
                if (this.BaseGet(index) != null)
                    this.BaseRemoveAt(index);

                this.BaseAdd(index, value);
            }
        }
        /// <summary>
        /// Obtém uma configuração pelo nome
        /// </summary>
        /// <param name="interfaceShortName">Nome da configuração</param>
        /// <returns>uma configuração pelo nome</returns>
        public new UpdateServersConfigurationElement this[string interfaceShortName]
        {
            get { return this.BaseGet(interfaceShortName) as UpdateServersConfigurationElement; }
        }
    }
}
